home *** CD-ROM | disk | FTP | other *** search
/ Reverse Code Engineering RCE CD +sandman 2000 / ReverseCodeEngineeringRceCdsandman2000.iso / RCE / Ebooks / Thinking in C++ V2 / C08 / StringStack.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2000-05-25  |  1.3 KB  |  62 lines

  1. //: C08:StringStack.cpp
  2. // From Thinking in C++, 2nd Edition
  3. // Available at http://www.BruceEckel.com
  4. // (c) Bruce Eckel 1999
  5. // Copyright notice in Copyright.txt
  6. // Using static const to create a compile-time
  7. // constant inside a class
  8. #include <string>
  9. #include <iostream>
  10. using namespace std;
  11.  
  12. class StringStack {
  13.   static const int size = 100;
  14.   const string* stack[size];
  15.   int index;
  16. public:
  17.    StringStack();
  18.    void push(const string* s);
  19.    const string* pop();
  20. };
  21.  
  22. StringStack::StringStack() : index(0) {
  23.   memset(stack, 0, size * sizeof(string*));
  24. }
  25.  
  26. void StringStack::push(const string* s) {
  27.   if(index < size)
  28.     stack[index++] = s;
  29. }
  30.  
  31. const string* StringStack::pop() {
  32.   if(index > 0) {
  33.     const string* rv = stack[--index];
  34.     stack[index] = 0;
  35.     return rv;
  36.   }
  37.   return 0;
  38. }
  39.  
  40. string iceCream[] = {
  41.   "pralines & cream",
  42.   "fudge ripple",
  43.   "jamocha almond fudge",
  44.   "wild mountain blackberry",
  45.   "raspberry sorbet",
  46.   "lemon swirl",
  47.   "rocky road",
  48.   "deep chocolate fudge"
  49. };
  50.  
  51. const int iCsz = 
  52.   sizeof iceCream / sizeof *iceCream;
  53.  
  54. int main() {
  55.   StringStack ss;
  56.   for(int i = 0; i < iCsz; i++)
  57.     ss.push(&iceCream[i]);
  58.   const string* cp;
  59.   while((cp = ss.pop()) != 0)
  60.     cout << *cp << endl;
  61. } ///:~
  62.